#!/bin/bash

ip=""
port=${KYO_NS_PORT-3000}

err_exit() {
    echo $1 > /dev/stderr
    exit $2
}

getIp() {
    local addr=""
    for addr in $(ifconfig | sed -nr 's/^.*addr:(([0-9]+.){3}[0-9]+).*$/\1/p')
    do
        egrep -q '^127\.' <<< $addr && continue
        if ping -q -c 1 ${addr%.*}.1 &> /dev/null ; then
            ip=$addr
            return 0
        fi
    done
    return 1
}

send() {
    tar -cf - $@ | nc -l $ip $port
}

recv() {
    local target=${2-./}
    # echo $target
    nc ${ip%.*}.$1 $port | tar -xf - -C $target
    exit 0
}

chat() {
    local op=${1--l}

    echo $op
    if test "$op" != "-l" ; then
        local srv=$(sed -nr "s/[Cc]([0-9]+)/\1/p" <<< $op)
        ip=${ip%.*}.$srv
        op=""
    fi
    # echo $op $ip $port

    nc $op $ip $port

    exit 0
}

getIp || err_exit "没有IP或网络不通...!" 1

test $# -eq 0 && chat
egrep -q '^[Cc][0-9]{1,3}$' <<< "$1" && chat $1
egrep -q '^[0-9]{1,3}$' <<< "$1" && recv $1 $2
send "$@"

# 端口号由KYO_NS_PORT环境变量来控制，默认为3000
# 没有参数代表监听端口等待客户端连接
# ns
# 第一个参数为C1到C254 则代表只接受对应数字IP发送的内容 聊天客户端
# ns C109 / ns c109
# 第一个参数为文件路径则支持多个代表监听端口等待客户端来接受文件
# ns file...
# 第一个参数为1到254 则接受对应数字IP的发送的文件
# ns 109
# 第一个参数为数字，第二个参数为接受文件存储位置，默认为当前位置
# ns 109 /dir/
